package com.ruoyi.common.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/**
 * 公共方法
 *
 * @author duyongmeng
 * @date 2020/11/2
 */
@Component
public class CommonMethod {

    private final Log logger = LogFactory.getLog(CommonMethod.class);

    /**
     * 校验参数是否合法
     *
     * @return boolean true
     */
    public boolean checkParams(String... params) {
        for (String param : params) {
            if (StringUtils.isBlank(param)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 根据所需长度返回UUID
     *
     * @return boolean true
     */
    public String getuid(int length) {
        return UUID.randomUUID().toString().replaceAll("-", "").substring(0, length);
    }

    /**
     * 根据日期格式获取当前时间
     *
     * @return String 当前时间
     */
    public String getLocalDateTime(String format) {
        String localDateTime = DateTimeFormatter.ofPattern(format).format(LocalDateTime.now());
        logger.info("当前时间————————————————>" + localDateTime);
        return localDateTime;
    }

    /**
     * md5加密
     *
     * @param data 要加密的数据
     * @return 加密后的数据
     * @throws NoSuchAlgorithmException 运行时异常
     */
    public String md5(String data) {
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return getString(data, md);
    }

    /**
     * hash运算
     *
     * @param data 要加密的数据
     * @return 加密后的数据
     * @throws NoSuchAlgorithmException 运行时异常
     */
    public String sha1(String data) {
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("SHA1");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return getString(data, md);
    }

    /**
     * 公共加密方式
     *
     * @param data 要加密的数据
     * @param md   加密方式
     * @return String 加密后的数据
     */
    private String getString(String data, MessageDigest md) {
        md.update(data.getBytes());
        StringBuilder buf = new StringBuilder();
        byte[] bits = md.digest();
        for (int bit : bits) {
            int a = bit;
            if (a < 0) {
                a += 256;
            }
            if (a < 16) {
                buf.append("0");
            }
            buf.append(Integer.toHexString(a));
        }
        return buf.toString();
    }

    /**
     * 根据图片连接下载并保存到本地文件
     *
     * @param urlImg   图片地址
     * @param filename 生成的文件名
     * @param savePath 保存路径
     */
    public void downloadImg(String urlImg, String filename, String savePath) {
        try {
            URL urlfile = new URL(urlImg);
            InputStream inStream = urlfile.openStream();
            BufferedImage image= ImageIO.read(inStream);
            ImageIO.write(image, "JPG", new File(savePath + "/" + filename + ".jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
